<?php
declare (strict_types = 1);
namespace app\controller;

use think\Request;
use think\facade\Log;

// +--------------------------------------------------------------------------------------------------------------------
// | 目的: 演示使用构造方法注入think\Request对象后,类 通用 该对象 的模式
// | 实现机制:基于 PHP 本身的容器和依赖注入机制,当构造方法的参数是对象时会主动触发依赖注入,
// |         访问控制器的参数都来自于URL请求，普通变量可以通过参数绑定自动获取
// | 核心流程示: https://www.processon.com/view/link/5e92049ce0b34d6feaa266e5
// | 注意: 这里注入的对象是 app 下的Request对象
// |
// +--------------------------------------------------------------------------------------------------------------------

/**
 * 构造方法注入示例
 */
class RequestConstruct
{
    /**
     * @var \think\Request Request实例
     */
    protected $request;

    /**
     * 构造方法
     * @param Request $request Request对象
     * @access public
     */
    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    /**
     * 参数自动获取
     *
     * @return \think\Response
     */
    public function index()
    {
        // 在构造方法里,初始过这个对象.所以在方法里就可以直接使用了
        return $this->request->param('name');
    }

    /**
     * 演示参数自动绑定和请求对象属性调用
     *
     * @param string $name 提交参数
     * @return \think\Response
     */
    public function hello($name)
    {
        return 'Hello,' . $name .'！'. PHP_EOL.'This is action->'. $this->request->action();
    }


}